// pages/profile/profile.js
// 首席研发团队最终审查版 (实现服务端历史记录)

const app = getApp();

Page({
  data: {
    hasUserInfo: false,
    userInfo: {},
    points: {},
    activeTabIndex: 0,
    
    // 【新增】历史记录相关状态
    historyList: [],
    historyPage: 1,
    historyPageSize: 20, // 每页加载的数量
    historyTotal: 0,     // 总记录数
    historyIsLoading: false, // 是否正在加载中
    historyHasMore: true, // 是否还有更多数据可加载
  },

  /**
   * 页面显示时触发
   */
  onShow() {
    const token = wx.getStorageSync('token');
    if (token) {
      if (!this.data.hasUserInfo) {
        this.getLatestUserInfo();
      }
      this.loadInitialHistory(); // 【核心】页面显示时，总是刷新第一页历史
    } else {
      this.setData({
        hasUserInfo: false, userInfo: {}, points: {},
        historyList: [], historyPage: 1, historyHasMore: true,
      });
    }
  },

  /**
   * 【新增】加载第一页历史记录
   */
  async loadInitialHistory() {
    // 重置状态
    this.setData({
      historyList: [],
      historyPage: 1,
      historyHasMore: true,
    });
    // 调用通用加载函数
    await this.fetchHistoryByPage(1);
  },

  /**
   * 【新增】加载更多历史记录 (由WXML的scroll-view触底时触发)
   */
  async loadMoreHistory() {
    if (this.data.historyIsLoading || !this.data.historyHasMore) {
      return; // 如果正在加载或没有更多数据了，则不执行
    }
    const nextPage = this.data.historyPage + 1;
    await this.fetchHistoryByPage(nextPage);
  },

  /**
   * 【新增】调用后端API的复用函数
   * @param {number} page - 要请求的页码
   */
  async fetchHistoryByPage(page) {
    this.setData({ historyIsLoading: true });
    
    try {
      const token = wx.getStorageSync('token');
      if (!token) throw new Error("未登录");

      const res = await this.wxRequestPromise({
        url: `/wechat/pv/history?page=${page}&page_size=${this.data.historyPageSize}`,
        method: 'GET',
        header: { 'Authorization': 'Bearer ' + token }
      });
      
      if (res.code !== 200) throw new Error(res.message || "获取历史失败");
      
      const newItems = res.data.items.map(item => ({
        ...item,
        // 格式化时间以便显示，例如 "6月17日 10:30"
        parsed_at_formatted: new Date(item.parsed_at).toLocaleString('zh-CN', {
          month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit'
        })
      }));
      
      this.setData({
        // 如果是第一页，则直接替换；否则，在现有列表后追加新数据
        historyList: page === 1 ? newItems : this.data.historyList.concat(newItems),
        historyPage: res.data.pagination.current_page,
        historyHasMore: res.data.pagination.current_page < res.data.pagination.total_pages,
      });

    } catch (error) {
      console.error(`加载第${page}页历史记录失败:`, error);
      wx.showToast({ title: error.message, icon: 'none' });
    } finally {
      this.setData({ historyIsLoading: false });
    }
  },

  /**
   * 点击历史记录项的事件
   */
  viewHistoryItem(e) {
      const item = e.currentTarget.dataset.item;
      console.log("点击了历史记录:", item);
      wx.showToast({ title: '详情页跳转待实现', icon: 'none' });
  },

  /**
   * 跳转到首页
   */
  goToParser() {
    wx.switchTab({ url: '/pages/index/index' });
  },

  // ======================================================
  // 您现有的、功能正常的函数（保持不变）
  // ======================================================
  
  switchTab(e) {
    this.setData({ activeTabIndex: Number(e.currentTarget.dataset.index) });
  },

  onSwiperChange(e) {
    this.setData({ activeTabIndex: e.detail.current });
  },

  getUserProfile() {
    wx.showLoading({ title: '正在授权...' });
    wx.getUserProfile({
      desc: '用于完善会员资料',
      success: (userProfileRes) => {
        const rawUserInfo = userProfileRes.userInfo;
        wx.showLoading({ title: '正在登录...' });
        wx.login({
          success: (loginRes) => {
            if (!loginRes.code) {
              wx.showToast({ title: '登录凭证获取失败', icon: 'none' });
              return;
            }
            const code = loginRes.code;
            this.wxRequestPromise({
              url: '/wechat/login',
              method: 'POST',
              data: {
                code: code,
                userInfo: rawUserInfo
              }
            })
            .then(loginResult => {
              if (loginResult && loginResult.code === 200) {
                const serverData = loginResult.data;
                wx.setStorageSync('token', serverData.token);
                this.setData({
                  hasUserInfo: true,
                  userInfo: serverData.userInfo,
                  points: serverData.points
                });
                wx.hideLoading();
                wx.showToast({ title: '登录成功' });
              } else {
                throw new Error(loginResult.message || '服务端登录失败');
              }
            })
            .catch(error => {
              wx.hideLoading();
              wx.showToast({ title: error.message || '登录失败', icon: 'none' });
            });
          },
          fail: () => wx.hideLoading() & wx.showToast({ title: '微信登录凭证获取失败', icon: 'none' })
        });
      },
      fail: () => wx.hideLoading() & wx.showToast({ title: '您已拒绝授权', icon: 'none' })
    });
  },

  async getLatestUserInfo() {
    try {
      const token = wx.getStorageSync('token');
      if (!token) return;
      const res = await this.wxRequestPromise({
        url: '/wechat/user/info',
        method: 'GET',
        header: { 'Authorization': 'Bearer ' + token }
      });
      if (res && res.code === 200) {
        this.setData({
          hasUserInfo: true,
          userInfo: res.data.userInfo,
          points: res.data.points
        });
      } else {
        wx.removeStorageSync('token');
        this.setData({ hasUserInfo: false, userInfo: {}, points: {} });
      }
    } catch (error) {
      console.error('刷新用户信息失败:', error);
    }
  },

  wxRequestPromise(options) {
    // 【注意】确保您的 apiBaseUrl 与 app.js 中一致，或使用全局配置
    const apiBaseUrl = 'https://iw6i1vjj93ml.guyubao.com/api';
    return new Promise((resolve, reject) => {
      const fullUrl = apiBaseUrl + options.url;
      wx.request({
        ...options, url: fullUrl,
        success: (res) => {
          if (res.statusCode >= 200 && res.statusCode < 300) {
            resolve(res.data);
          } else {
            reject(new Error(`请求失败: ${res.statusCode}`));
          }
        },
        fail: (err) => reject(new Error(`网络错误: ${err.errMsg}`))
      });
    });
  }
});